Interface Capabilities(Interface的能力)
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
Interface
声明文件中声明了一个新的类,这个新的类可以在之后被用到。类的声明包含所有其他代码用到的必要的信息。
- 首先,类的声明告诉程序员,这个类在整个类的层级继承关系中的位置,也就是新声明的类的父类是谁。
- 其次,它告诉程序员,这个类的子类可以继承我的那些实例变量。
- 最后,它告诉程序中的其他代码,我提供了哪些类方法,提供了哪些实例方法(必须创建对象才能调用)
Interface声明文件使用.h
文件。下面请看一个声明新类的例子:
#import <Foundation/NSOject.h>
@interface Point : NSObject
{
@private
//private的实例变量只能被这个类的对象存取
@protected
// protected的实例变量可以被这个类的子类对象存取
float x;
float y;
@public
// public的实例变量可以被任意代码存取
}
//类方法(不用生成对象,不能访问实例对象)
+ (id) new;
+ (id) newWithX: (float)x0 Y: (float)y0;
+ (Point*) point;
+ (Point*) pointWithX: (float)x0 Y: (float)y0;
//实例方法(必须生成对象)
- (id) init;
- (id) initWithX: (float)x0 Y: (float)y0;
- (float) x; // (field accessor)
- (float) y;
- (void) setX: (float)newX;
- (void) setY: (float)newY;
@end
Interface声明文件要将声明的新类的父类的interface
文件引入。
类的声明开始于@interface
关键字,结束于@end
关键字。
声明要点:这个类继承自哪个类很重要,如果新类不继承自任何类,类名后面就不要有冒号(:
),那么你声明的类就成为了一个根类(Root class
),当然,你可能并不想这么做。
类声明中,用大括号括起来的是实例变量(属性)声明的地方。当然,每个类都有很多从父类以及父类的父类一直延伸到根类继承来的实例变量。
实例变量可以分为三种类型,分别是private
,protected
,public
。
- Private类型的实例变量只能被该类的对象访问。
- Protected类型的实例变量可以被子类的对象访问。
- Public类型的实例变量可以被任意代码段访问。
这点和C++或者Java很类似。如果你不给实例变量一个类型,那么缺省的类型是protected
。
方法声明有两种:
- 用”+”表示的是类方法,你调用这些类方法时,不用实例化一个对象出来。但是类方法不能访问任何的实例变量。可以从父类继承类方法。
- 另外一种方法,用”-”表示,这种方法称为实例方法(Instance method),你必须实例化一个类的对象出来,才可以调用这类方法。实例方法可以从父类继承。
实例方法可以访问实例变量。 方法的返回类型声明依然沿用了C语言的表达式:
- (float) x;
上面的方法返回一个float类型的变量。 方法的参数声明与返回值一样
- (void) setX: (float)newX;
上面的方法不返回任何,它需要一个float
类型的参数newX
注意,一个方法的返回类型如果没有明确给出,那么它将返回一个id类型的对象。例如方法"-name"
,实际上它将返回一个id类型的对象。所以如果一个方法没有任何返回值,最好清楚写成(void
),来避免这个问题的发生。
在线练习
{$ activeFileHint $}